/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package utilisateurs.gestionnaires;

import java.util.Collection;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import utilisateurs.modeles.Utilisateur;

/**
 *
 * @author Franck Munier
 */
@Stateless
public class GestionnaireUtilisateurs {

    @PersistenceContext(unitName = "Web_TP2PU")
    private EntityManager em;
    // Ici injection de code : on n'initialise pas. L'entity manager sera créé
    // à partir du contenu de persistence.xml

    public void creerUtilisateursDeTest() {
        creeUtilisateur("John", "Lennon", "jlennon");
        creeUtilisateur("Paul", "Mac Cartney", "pmc");
        creeUtilisateur("Ringo", "Starr", "rstarr");
        creeUtilisateur("Georges", "Harisson", "georgesH");
    }

    public Utilisateur creeUtilisateur(String prenom, String nom, String login) {
        Utilisateur u = new Utilisateur(prenom, nom, login);
        em.persist(u);
        return u;
    }

    public Collection<Utilisateur> getAllUsers() {
        // Exécution d'une requête équivalente à un select *
        Query q = em.createQuery("select u from Utilisateur u");
        return q.getResultList();
    }

    public Collection<Utilisateur> getUserByLogin(String login) {
        // Exécution d'une requête équivalente à un select *
        Query q = em.createQuery("select u from Utilisateur u where u.login=:login");
        q.setParameter("login", login);
        return q.getResultList();
    }

    public void updateUser(String prenom, String nom, String login) {
        Query q = em.createQuery("update Utilisateur u set u.firstname=:nom, u.lastname=:prenom where u.login=:login");
        q.setParameter("login", login);
        q.setParameter("nom", nom);
        q.setParameter("prenom", prenom);
        q.executeUpdate();
    }

    public void deleteUser(String login) {
        // Exécution d'une requête équivalente à un select *
        Query q = em.createQuery("delete from Utilisateur u where u.login=:login");
        q.setParameter("login", login);
        q.executeUpdate();
    }

    public void deleteAllUsers(Collection<Utilisateur> liste) {
        // Exécution d'une requête équivalente à un select *
        String login = null;
        for (Utilisateur u : liste) {
            login = u.getLogin();
            Query q = em.createQuery("delete from Utilisateur u where u.login=:login");
            q.setParameter("login", login);
            q.executeUpdate();
        }
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    public void persist(Object object) {
        em.persist(object);
    }
}
